package xyz.mumuwei.youthcourseserver.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import xyz.mumuwei.youthcourseserver.common.dto.EmailDto;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

/**
 * @author mumuwei
 * @date 2022/2/22
 */
@Component
public class EmailUtil {

    /**
     * 发邮件时使用的用户名
     * 发件人
     */
    @Value("${spring.mail.username}")
    private String from;

    private JavaMailSender javaMailSender;
    private TemplateEngine templateEngine;

    @Autowired
    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    @Autowired
    public void setTemplateEngine(TemplateEngine templateEngine) {
        this.templateEngine = templateEngine;
    }

    /**
     * html模板邮件
     *
     * @param to         收件人
     * @param subject    邮件主题
     * @param emailDto 给模板的参数
     * @param template   html模板路径(相对路径)  Thymeleaf的默认配置期望所有HTML文件都放在 **resources/templates ** 目录下，以.html扩展名结尾。
     * @param imgPath  图片/文件路径(绝对路径)
     */
    public void thymeleafEmail(String[] to, String subject, EmailDto emailDto, String template, String imgPath) throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        // 利用 Thymeleaf 模板构建 html 文本
        Context ctx = new Context();
        // 给模板的参数的上下文
        ctx.setVariable("emailDto", emailDto);
        // 执行模板引擎，执行模板引擎需要传入模板名、上下文对象
        // Thymeleaf的默认配置期望所有HTML文件都放在 **resources/templates ** 目录下，以.html扩展名结尾。
        // String emailText = templateEngine.process("email/templates", ctx);
        String emailText = templateEngine.process(template, ctx);
        mimeMessageHelper.setText(emailText, true);
        // FileSystemResource logoImage= new FileSystemResource("D:\\image\\logo.jpg");
        //绝对路径
        // FileSystemResource logoImage = new FileSystemResource(imgPath);
        //相对路径，项目的resources路径下
        //ClassPathResource logoImage = new ClassPathResource("static/image/logonew.png");
        // 添加附件,第一个参数表示添加到 Email 中附件的名称，第二个参数是图片资源
        //一般图片调用这个方法
        // mimeMessageHelper.addInline("logoImage", logoImage);
        // 一般文件附件调用这个方法
		// mimeMessageHelper.addAttachment("logoImage", resource);
        javaMailSender.send(mimeMessage);
    }
}